﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Windows.Forms;
using log4net;
using SegIdenPC.Entidad;
using SegIdenPC.Herramientas;

namespace SegIdenPC.Utilitarios
{
    /// <summary>
    /// Clase       : ExportarExcel
    /// Descripcion : Contiene la logica para exportar una coleccion de objetos a Excel
    /// Autor       : 
    /// Fecha       : 04/05/2012
    /// Empresa     : CasaDesign
    /// </summary>
    public class ExportarExcel
    {
        #region --- Variables y Propiedades ---
        private StreamWriter w = null;
        #endregion

        #region --- Metodos Propios ---
        public bool crearExcelTabla(string ruta, DataGridView grilla)
        {
            bool resultado = false;
            FileStream fs = null;

            try
            {
                fs = new FileStream(ruta, FileMode.Create, FileAccess.ReadWrite);
                w = new StreamWriter(fs);

                escribeCabeceraTabla(grilla);
                escribeDetalleTabla(grilla);
                escribePiePagina();

                w.Flush();
                w.Close();
                w.Dispose();
                w = null;

                resultado = true;
            }
            finally
            { }
            return resultado;
        }

        public bool crearExcelInventario(string ruta, Inventario inventario, DataGridView grilla)
        {
            bool resultado = false;
            FileStream fs = null;

            try
            {
                fs = new FileStream(ruta, FileMode.Create, FileAccess.ReadWrite);
                w = new StreamWriter(fs);

                escribeCabeceraInventario(inventario, grilla);
                escribeDetalleTabla(grilla);
                escribePiePagina();

                w.Flush();
                w.Close();
                w.Dispose();
                w = null;

                resultado = true;
            }
            finally
            { }
            return resultado;
        }

        public bool crearExcelContenidoGuia(string ruta, ReporteGuia reporteGuia, DataGridView grilla)
        {
            bool resultado = false;
            FileStream fs = null;

            try
            {
                fs = new FileStream(ruta, FileMode.Create, FileAccess.ReadWrite);
                w = new StreamWriter(fs);

                escribeCabeceraContenidoGuia(reporteGuia, grilla);
                escribeDetalleTabla(grilla);
                escribePiePagina();

                w.Flush();
                w.Close();
                w.Dispose();
                w = null;

                resultado = true;
            }
            finally
            { }
            return resultado;
        }

        public bool crearExcelContenidoFactura(string ruta, ReporteVentaDetalle reporteVenta, DataGridView grilla)
        {
            bool resultado = false;
            FileStream fs = null;

            try
            {
                fs = new FileStream(ruta, FileMode.Create, FileAccess.ReadWrite);
                w = new StreamWriter(fs);

                escribeCabeceraContenidoFactura(reporteVenta, grilla);
                escribeDetalleTabla(grilla);
                escribePiePaginaContenidoFactura(reporteVenta, grilla);

                w.Flush();
                w.Close();
                w.Dispose();
                w = null;

                resultado = true;
            }
            finally
            { }
            return resultado;
        }

        private void escribeCabeceraTabla(DataGridView grilla)
        {
            StringBuilder html = new StringBuilder();
            html.Append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
            html.Append("<html>");
            html.Append("  <head>");
            html.Append("    <title>www.gs1pe.org</title>");
            html.Append("    <meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\" />");
            html.Append("  </head>");
            html.Append("<body>");
            html.Append("<p>");
            html.Append("<table>");
            html.Append("<tr bgcolor=\"LightBlue\">");
            html.Append("  <td></td>");

            for (int i = 0; i < grilla.ColumnCount; i++)
            {
                if (grilla.Columns[i].Visible)
                {
                    html.Append("  <td>" + grilla.Columns[i].HeaderText + "</td>");
                }
            }

            html.Append("</tr>");

            w.Write(html.ToString());
        }

        

        private void escribeCabeceraInventario(Inventario inventario, DataGridView grilla)
        {
            StringBuilder html = new StringBuilder();
            html.Append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
            html.Append("<html>");
            html.Append("  <head>");
            html.Append("    <title>www.gs1pe.org</title>");
            html.Append("    <meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\" />");
            html.Append("  </head>");
            html.Append("<body>");
            html.Append("<table>");
            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>Nº.</td>");
            html.Append("<td>" + inventario.codInventario + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>Tienda:</td>");
            html.Append("<td>" + inventario.tienda.descripcion + "</td>");
            html.Append("</tr><br>");
            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>Fecha:</td>");
            html.Append("<td>" + inventario.fechaRegistro+ "</td><br>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("</tr>");
            html.Append("</table>");
            html.Append("</p>"); 
            html.Append("<table>");
            html.Append("<tr bgcolor=\"LightBlue\">");
            html.Append("  <td></td>");
            
            for (int i = 0; i < grilla.ColumnCount; i++)
            {
                if (grilla.Columns[i].Visible)
                {
                    html.Append("  <td>" + grilla.Columns[i].HeaderText + "</td>");
                }
            }

            html.Append("</tr>");

            w.Write(html.ToString());
        }

        private void escribeCabeceraContenidoGuia(ReporteGuia reporteGuia, DataGridView grilla)
        {
            StringBuilder html = new StringBuilder();
            html.Append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
            html.Append("<html>");
            html.Append("  <head>");
            html.Append("    <title>www.gs1pe.org</title>");
            html.Append("    <meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\" />");
            html.Append("  </head>");
            html.Append("<body>");
            html.Append("<table>");
            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td colspan='4' align='center'> REPORTE CONTENIDO GUIA </td>");
            html.Append("</tr><br>");
            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>SERIE:</td>");
            html.Append("<td>" + reporteGuia.guia.serie + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>DOCUMENTO DE VENTA:  "   + reporteGuia.documentoVenta + "</td>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>NUMERO:</td>");
            html.Append("<td>" + reporteGuia.guia.numero + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>DESPACHADO:  "   + reporteGuia.despachado + "</td>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>ORIGEN:</td>");
            html.Append("<td>" + reporteGuia.guia.tiendaOrigen.descripcion + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>MOVILIDAD:  "   + reporteGuia.movilidadPropia +  "</td>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>DESTINO:</td>");
            html.Append("<td>" + reporteGuia.destino + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>FECHA:  " +   reporteGuia.guia.fechaEmision + "</td>");
            html.Append("</tr><br>");
            html.Append("</table>");
            html.Append("</p>");
            html.Append("<table>");
            html.Append("<tr bgcolor=\"LightBlue\">");
            html.Append("  <td></td>");

            for (int i = 0; i < grilla.ColumnCount; i++)
            {
                if (grilla.Columns[i].Visible)
                {
                    html.Append("  <td>" + grilla.Columns[i].HeaderText + "</td>");
                }
            }

            html.Append("</tr>");

            w.Write(html.ToString());
        }

        private void escribeCabeceraContenidoFactura(ReporteVentaDetalle reporteVenta, DataGridView grilla)
        {
            StringBuilder html = new StringBuilder();
            html.Append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
            html.Append("<html>");
            html.Append("  <head>");
            html.Append("    <title>www.gs1pe.org</title>");
            html.Append("    <meta http-equiv=\"Content-Type\"content=\"text/html; charset=UTF-8\" />");
            html.Append("  </head>");
            html.Append("<body>");
            html.Append("<table>");
            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td colspan='5' align='center'  > REPORTE CONTENIDO FACTURA </td>");
            html.Append("</tr><br>");
            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>TIPO DOCUMENTO:</td>");
            html.Append("<td>" + reporteVenta.venta.tipoDocumentoVenta.descripcion + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>VENDEDOR:</td>");
            html.Append("<td>" + reporteVenta.venta.usuario.nombres + " " + reporteVenta.venta.usuario.apellidos + "</td><br>");
            html.Append("</tr><br>");

             html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>SERIE:</td>");
            html.Append("<td>" + reporteVenta.venta.serie + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>DECORADOR:</td>");
            html.Append("<td>" + reporteVenta.venta.diseniador.nombresyApellidos + "</td><br>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>NUMERO:</td>");
            html.Append("<td>" + reporteVenta.venta.numero + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>TIENDA:</td>");
            html.Append("<td>" + reporteVenta.venta.tienda.descripcion + "</td><br>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td>RAZÓN SOCIAL:</td>");
            html.Append("<td>" + reporteVenta.venta.cliente.razonSocial + "</td><br>");
            html.Append("<td></td>");
            html.Append("<td>ENTREGADO:</td>");
            html.Append("<td>" + reporteVenta.descripcionEstado + "</td><br>");
            html.Append("</tr><br>");
            html.Append("</table>");
            html.Append("</p>");
            html.Append("<table>");
            html.Append("<tr bgcolor=\"LightBlue\">");
            html.Append("  <td></td>");

            for (int i = 0; i < grilla.ColumnCount; i++)
            {
                if (grilla.Columns[i].Visible)
                {
                    html.Append("  <td>" + grilla.Columns[i].HeaderText + "</td>");
                }
            } 
            html.Append("</tr>");
            w.Write(html.ToString()); 
        }


        private void escribeDetalleTabla(DataGridView grilla)
        {
            string bgColor = string.Empty;
            string fontColor = string.Empty;

            StringBuilder html = new StringBuilder();

            for (int fila = 0; fila < grilla.Rows.Count; fila++)
            {
                html.Append("<tr>");
                html.Append("<td></td>");

                for (int columna = 0; columna < grilla.ColumnCount; columna++)
                {
                    if (grilla.Columns[columna].Visible)
                    {
                        html.Append("<td>" + grilla.Rows[fila].Cells[columna].Value.ToString() + "</td>");
                    }
                }

                html.Append("</tr>");
            }

            w.Write(html.ToString());
        }

        private void escribePiePagina()
        {
            StringBuilder html = new StringBuilder();
            html.Append("  </table>");
            html.Append("</p>");
            html.Append(" </body>");
            html.Append("</html>");
            w.Write(html.ToString());
        }

        private void escribePiePaginaContenidoFactura(ReporteVentaDetalle reporteVenta, DataGridView grilla)
        {
            StringBuilder html = new StringBuilder();
            html.Append("<table>");
            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td><br>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td>SUBTOTAL:</td>");
            html.Append("<td>" + reporteVenta.venta.subTotal + "</td><br>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td>IGV:</td>");
            html.Append("<td>" + reporteVenta.venta.igv + "</td><br>");
            html.Append("</tr><br>");

            html.Append("<tr>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td></td>");
            html.Append("<td>TOTAL:</td>");
            html.Append("<td>" + reporteVenta.venta.total + "</td><br>");
            html.Append("</tr><br>");
            html.Append("  </table>");
            html.Append("</p>");
            html.Append(" </body>");
            html.Append("</html>");
            w.Write(html.ToString());
        }
         
        
        #endregion
    }
}
